package cn.xuqiudong.rpc.extension;

import cn.xuqiudong.rpc.extension.factory.SpiXqdExtensionFactory;

/**
 * 描述: 扩展点工厂接口
 * @author Vic.xu
 * @date 2022-02-14 17:27
 */
public interface XqdExtensionFactory {

    /**
     * 获取扩展
     * @param type 接口类型
     * @param name 某个实现 name
     * @return  对象实例
     */
    <T> T getXqdExtension(Class<T> type, String name);

    /**
     * 获取自适应的扩展： 查找配置，找不到则获取默认的扩展
     * @param type 接口类型
     * @param <T> 对象实例
     * @return
     */
    <T> T getAdaptiveXqdExtension(Class<T> type);


    /**
     *  获取默认的工厂 由于暂时没有实现 XqdExtensionFactory 的动态扩展，在本系统中默认使用XqdExtensionFactory
     * @return XqdExtensionFactory
     */
    public static XqdExtensionFactory defaultExtendFactory() {
        return SpiXqdExtensionFactory.getInstance();
    }
}
